<?php namespace Home\Controller; 

use Hdphp\Controller\Controller;
use Common\Model\Category;
use Common\Model\Goods;
use Common\Model\GoodsAttr;
use Common\Model\TypeAttr;
//列表页控制器
class ListsController extends Controller{

	
	
    //列表页
	public function index(){
    	// 顶级导航================
    	// 实例化分类模型
    	$cateModel=new Category;
    	// 查询
    	$cateData=$cateModel->where("pid=0")->limit('9')->get();
    	// sp($cateData);
    	// 分配变量
    	View::with('cateData',$cateData);
    	// ======================================

    	//======================================
       // 获取分类的cid
        $cid=Q('get.cid',0,'intval');
         // 实例化分类模型
        $gids=$this->cidGetGid($cid);
//     sp($gids);
		//根据商品gid获取商品属性
		$goodsAttr=$this->getGoodsAttr($gids);
//		sp($goodsAttr);
		View::with('goodsAttr',$goodsAttr);
		//=============
//		地址筛选处理
		$num=count($goodsAttr);
//		sp($num);die;
		if($num){
			$param=isset($_GET['param']) ? explode('_',$_GET['param']):array_fill(0,$num,0);
		}else{
			$param=array();
		}
//		sp($param);
		View::with('param',$param);
		//======================
		//根据属性ID进行筛选商品
		$goodsModel=new Goods;
		$finalGids=$this->filterGid($param,$gids);
        if($finalGids){
          $finalGids=implode(',',$finalGids);
    	   $goodsData=$goodsModel->where("gid in ({$finalGids})")->get();
        }else{
        	$goodsData=array();
        }
		
//         sp($goodsData);
//      // 分配数据
    	View::with('goodsData',$goodsData);
       
       View::make();
    }

	public function filterGid($param,$cidGids){
		$gids=array();
		foreach ($param as $gtid) {
			if($gtid){
				//实例化商品属性模型
				$goodsAttrModel=new GoodsAttr;
				 //通过taid获得属性的名称
				$name=$goodsAttrModel->where("gtid={$gtid}")->pluck('gtvalue');
//				sp($name);
				//通过属性名称查找商品gid
				$gids[]=$goodsAttrModel->where("gtvalue='{$name}'")->lists('goods_gid');
//				sp($gids);
			}
		}
		if($gids){
			//把获取到的商品gid取交集
			$gidsOne=$gids[0];
			foreach ($gids as $v) {
				$gidsOne=array_intersect($v,$gidsOne);
		}
			//再和分类查找出出来的$cidGids取交集
			$finalGids=array_intersect($gidsOne,$cidGids);
			
		return $finalGids;
	}else{//如果点击全部的时候
		return $cidGids;
	
	
	}
}
	//通过商品gid获取属性
	public function getGoodsAttr($gids){

		if($gids){
			//		实例化商品属性模型
			$goodsAttrModel=new GoodsAttr;
//			将数组转为字符串
			$gids=implode(',',$gids);
//			sp($gids);
			//查询
			$goodsAttrData=$goodsAttrModel->where("goods_gid in ($gids)")->groupBy('gtvalue')->get();
//			sp($goodsAttrData);
			//将相同的归结一起
			$temp1=array();
			//循环
			foreach ($goodsAttrData  as $v){
				$temp1[$v['type_attr_taid']][]=$v;
			}
			$temp2=array();
			foreach ($temp1 as $taid => $value) {
//				实例化类型属性表
				$typeAttrModel=new TypeAttr;
				$name=$typeAttrModel->where("taid=$taid")->pluck('taname');
				$temp2[]=array(
					'name'=>$name,
					'value'=>$value,
				);
			}
			return $temp2;
		}else{
			return array();
		}
	}
	
	public function cidGetGid($cid){
		// 实例化分类模型
    	$cateModel=new Category;
//		查询
		$data=$cateModel->get();//获取所有的分类
		$cids=$cateModel->getSon($data,$cid);//获取cid对应的子分类
		$cids[]=$cid;
//		sp($cids);
//		将数组转为字符串
		$cids=implode(',',$cids);
//		sp($cids);
//		实例化商品表模型
		$goodsModel=new Goods;
		//通过分类ID查找商品ID
		$gids=$goodsModel->where("category_cid in ($cids)")->lists('gid');
		return $gids;
	}
	

	
}
